/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.inspur.edp.cef.generator.repository.entity;


import com.inspur.edp.caf.generator.BaseGenerator;
import com.inspur.edp.cef.generator.overall.commonModel.CommonModelGeneratorContext;
import com.inspur.edp.cef.generator.repository.base.CefRepositoryGenerstor;
import com.inspur.edp.das.commonmodel.IGspCommonModel;
import com.inspur.edp.das.commonmodel.IGspCommonObject;

public abstract class CommonModelRepoGenerator extends CefRepositoryGenerstor {
  private CommonModelGeneratorContext cmGenCtx;
  private IGspCommonModel commonModel;

  public CommonModelRepoGenerator(
      CommonModelGeneratorContext cmGenCtx, IGspCommonModel commonModel) {
    super(cmGenCtx);
    this.cmGenCtx = cmGenCtx;
    this.commonModel = commonModel;
  }

//  @Override
//  protected String getAssemblyName() {
//    return String.format("%1$s.Repository", cmGenCtx.getDataTypeNamespace());
//  }

  @Override
  protected java.util.ArrayList<BaseGenerator> createChildGenerators() {
    java.util.ArrayList<BaseGenerator> list = new java.util.ArrayList<BaseGenerator>();
    list.add(getEntityAssemblerGenerator());
    return list;
  }

  private EntityAssmeblerGenerator getEntityAssemblerGenerator() {
    // if (commonModel.getMainObject().getIsRef())
    //    return getExtendEntityAssGenerator(commonModel.getMainObject());
    return getMainEntityAssmeblerGenerator(commonModel.getMainObject());
  }

  protected abstract ExtendEntityAssemblerGenerator getExtendEntityAssGenerator(
      IGspCommonObject cmObject);

  protected abstract MainEntityAssemblerGenerator getMainEntityAssmeblerGenerator(
      IGspCommonObject cmObject);
}
